using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Collections;
/// <summary>
/// Summary description for UploadValidator
/// </summary>
public class UploadValidator
{
    List<Vak> vakken = new List<Vak>();
    List<Rij> rijen = new List<Rij>();
    List<Int32> vakId = new List<Int32>();
    String nieuweLijn = "<br />";
    string gebruiker;
    Databank db;
    int richtingId;
	public UploadValidator(List<Rij> r,string gebruiker)
	{
        rijen = r;
        db = Databank.DatabankInstantie;
        vakken = db.GetVakken();
        this.gebruiker = gebruiker;
        
	}
    public UploadValidator(List<Rij> r, int richtingId)
    {
        rijen = r;
        db = Databank.DatabankInstantie;
        vakken = db.GetVakken();
        this.richtingId = richtingId;

    }
    public String Valideer()
    {
        String result = "";
        result = ControleerVakBestaat();
        if(result.Equals(""))
        {
            result = ControleVakkenGebruiker(gebruiker);
        }
        return result;
     }
    public String ValideerAgendaRichting()
    {
        String result = "";
        result = ControleerVakBestaat();
        if (result.Equals(""))
        {
            result = ControleVakkenRichting(richtingId);
        }
        return result;
    }
    private string ControleVakkenRichting(int richtingId)
    {
        string result = "";
        List<Vak> vakkenInRichting = db.GetVakkenRichting(richtingId);
        for (int i = 0; i < rijen.Count; i++)
        {
            int id = Zoeken(vakkenInRichting, rijen[i].Vak);
            if (id != -1)
            {
                vakId.Add(vakkenInRichting[id].Id); 
            }
            else
            {
                result += "Vak met code:" + rijen[i].Vak.ToString() + "behoord niet tot de richting" + nieuweLijn;
            }
        }
        return result;
    }
    private String ControleerVakBestaat()
    {
        String result = "";
        for (int i = 0; i < rijen.Count; i++)
        {
            int id = Zoeken(vakken,rijen[i].Vak);
            if (id == -1)
            {
                result += "Vak met code:" + rijen[i].Vak.ToString() + " bestaat niet" + nieuweLijn;
            }
        }
        return result;
    }
    private String ControleVakkenGebruiker(string gid)
    {
        String result = "";
        List<Vak> vakkenVoorGebruiker = GetVakkenGebruiker(gid);
        for (int i = 0; i < rijen.Count; i++)
        {
            int id = Zoeken(vakkenVoorGebruiker,rijen[i].Vak);
            if (id != -1)
            {
                vakId.Add(vakkenVoorGebruiker[id].Id);
            }
            else
            {
                result += "Vak met code:" + rijen[i].Vak.ToString() + "behoord niet tot uw opleiding" + nieuweLijn;
            }
        }
        return result;
    }
    private int Zoeken(List<Vak> v,String zoekVak)
    {
        int result = -1;
        for (int i = 0; i < v.Count; i++)
        {
            if (string.Equals(v[i].Code, zoekVak)){
            
                result = i;
            }
        }
        return result;
    }
    private List<Vak> GetVakkenGebruiker(string gid)
    {
        List<Richting> gebruikerRichtingen = db.GetGebruikerRichtingen(gid);
        List<Vak> vakkenResult = new List<Vak>();
        for (int i = 0; i < gebruikerRichtingen.Count; i++)
        {
            List<Vak> temp = db.GetVakkenRichting(gebruikerRichtingen[i].Id);
            for (int y = 0; y < temp.Count; y++)
            {
                int test = Zoeken(vakkenResult,(temp[y].Code));
                if (test == -1)
                {
                    vakkenResult.Add(temp[y]);
                }
            }
        }
        return vakkenResult;
    }
    public List<AgendaItem> GetAdgendaItems(){
        List<AgendaItem> ai = new List<AgendaItem>();
        DateTime b;
        DateTime e;
        int minuten;
        for (int i = 0; i < rijen.Count; i++)
        {
            b = rijen[i].Begindatum;
            string uur = rijen[i].Begintijd.ToString().Substring(0, 2);
            if(uur.Contains(":")){
                rijen[i].Begintijd = "0" + rijen[i].Begintijd;
            }
            b = b.AddHours(double.Parse(rijen[i].Begintijd.ToString().Substring(0, 2)));
            b = b.AddMinutes(double.Parse(rijen[i].Begintijd.ToString().Substring(3,2)));
            e = rijen[i].Einddatum;
            uur = rijen[i].Eindtijd.ToString().Substring(0, 2);
            if (uur.Contains(":"))
            {
                rijen[i].Eindtijd = "0" + rijen[i].Eindtijd;
            }
            e = e.AddHours(double.Parse(rijen[i].Eindtijd.ToString().Substring(0, 2)));
            e = e.AddMinutes(double.Parse(rijen[i].Eindtijd.ToString().Substring(3, 2)));
            TimeSpan span  = e-b;
            minuten = int.Parse(span.TotalMinutes.ToString());
            if(minuten > 1){
            /*(Vakid , datum , aantal min , contactuur )  gebruikerid(==>email momenteel)*/
            bool contactuur = !(rijen[i].Vak.StartsWith("NC-"));
            ai.Add(new AgendaItem(vakId[i], b, minuten, contactuur));
            }
        }
        return ai;
    }
}
